Thanks for using Compiler Explorer
Sponsors
Jakt
C++
Ada
Analysis
Android Java
Android Kotlin
Assembly
C
C3
Carbon
C++ (Circle)
CIRCT
Clean
CMake
CMakeScript
COBOL
C++ for OpenCL
MLIR
Cppx
Cppx-Blue
Cppx-Gold
Cpp2-cppfront
Crystal
C#
CUDA C++
D
Dart
Elixir
Erlang
Fortran
F#
Go
Haskell
HLSL
Hook
Hylo
ispc
Java
Julia
Kotlin
LLVM IR
LLVM MIR
Modula-2
Nim
Objective-C
Objective-C++
OCaml
OpenCL C
Pascal
Pony
Python
Racket
Ruby
Rust
Snowball
Scala
Solidity
Spice
Swift
LLVM TableGen
Toit
TypeScript Native
V
Vala
Visual Basic
Zig
Javascript
GIMPLE
ada source #1
Output
Compile to binary object
Link to binary
Execute the code
Intel asm syntax
Demangle identifiers
Verbose demangling
Filters
Unused labels
Library functions
Directives
Comments
Horizontal whitespace
Debug intrinsics
Compiler
S390X GNAT 11.2.0
S390X GNAT 12.1.0
S390X GNAT 12.2.0
S390X GNAT 12.3.0
S390X GNAT 13.1.0
S390X GNAT 13.2.0
arm gnat 10.3.0-2 (Alire)
arm gnat 11.2.0-3 (Alire)
arm gnat 13.1.0
arm gnat 13.2.0
arm64 gnat 12.1.0
arm64 gnat 12.2.0
arm64 gnat 12.3.0
arm64 gnat 13.1.0
arm64 gnat 13.2.0
mips gnat 11.2.0
mips gnat 12.1.0
mips gnat 12.2.0
mips gnat 12.3.0
mips gnat 13.1.0
mips gnat 13.2.0
mips64 gnat 11.2.0
mips64 gnat 12.1.0
mips64 gnat 12.2.0
mips64 gnat 12.3.0
mips64 gnat 13.1.0
mips64 gnat 13.2.0
powerpc gnat 11.2.0
powerpc gnat 12.1.0
powerpc gnat 12.2.0
powerpc gnat 12.3.0
powerpc gnat 13.1.0
powerpc gnat 13.2.0
powerpc64 gnat 12.1.0
powerpc64 gnat 12.2.0
powerpc64 gnat 12.3.0
powerpc64 gnat 13.1.0
powerpc64 gnat 13.2.0
powerpc64 gnat trunk
powerpc64le gnat 11.2.0
powerpc64le gnat 12.1.0
powerpc64le gnat 12.2.0
powerpc64le gnat 12.3.0
powerpc64le gnat 13.1.0
powerpc64le gnat 13.2.0
powerpc64le gnat trunk
riscv64 gnat 10.3.0-2 (Alire)
riscv64 gnat 11.2.0-3 (Alire)
riscv64 gnat 12.3.0
riscv64 gnat 13.1.0
riscv64 gnat 13.2.0
sparc gnat 12.2.0
sparc gnat 12.3.0
sparc gnat 13.1.0
sparc gnat 13.2.0
sparc leon gnat 13.1.0
sparc leon gnat 13.2.0
sparc64 gnat 12.2.0
sparc64 gnat 12.3.0
sparc64 gnat 13.1.0
sparc64 gnat 13.2.0
x86-64 gnat (trunk)
x86-64 gnat 10.2
x86-64 gnat 10.4
x86-64 gnat 10.5
x86-64 gnat 11.1
x86-64 gnat 11.2
x86-64 gnat 11.3
x86-64 gnat 11.4
x86-64 gnat 12.1
x86-64 gnat 12.2
x86-64 gnat 12.3
x86-64 gnat 13.1
x86-64 gnat 13.2
x86-64 gnat 8.2
x86-64 gnat 9.5
Options
Source code
with Ada.Text_IO; use Ada.Text_IO; with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; with Ada.Strings.Unbounded.Text_IO; use Ada.Strings.Unbounded.Text_IO; with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; with Ada.Containers.Vectors; with Ada.Containers; use Ada.Containers; procedure Main is Line : Unbounded_String; type BitMask is array (1..52) of Boolean; package Bitmask_Vectors is new Ada.Containers.Vectors (Index_Type => Positive, Element_Type => Bitmask); use Bitmask_Vectors; Function To_BitMask (S : String) return BitMask is A : BitMask := (others => False); Pos : Integer; begin for C of S loop if C >= 'a' and then C <= 'z' then Pos := Character'Pos(C) - Character'Pos('a') + 1; else Pos := Character'Pos(C) - Character'Pos('A') + 27; end if; A(Pos) := True; end loop; return A; end To_BitMask; Part1_Count : Integer := 0; Part2_Count : Integer := 0; Group : Vector; F : File_Type; begin Open (F, In_File, "input.txt"); while (not Ada.Text_IO.End_Of_File (F)) loop Get_Line (F, Line); Bitmask_Vectors.Append (Group, To_Bitmask (To_String (Line))); if Group.Length = 3 then declare Intersect : constant Bitmask := Group (1) and Group (2) and Group (3); begin for I in Intersect'Range loop if Intersect (I) then Part2_Count := Part2_Count + I; end if; end loop; end; Group.Clear; end if; declare Left : BitMask := To_BitMask (Slice(Line, 1, Length(Line)/2)); Right : BitMask := To_BitMask (Slice(Line, Length(Line)/2+1, Length(Line))); Intersect : constant Bitmask := Left and Right; begin if Intersect /= Bitmask'(others => False) then for I in Intersect'Range loop if Intersect(I) then Part1_Count := Part1_Count + I; end if; end loop; end if; end; end loop; -- part 1 : 8493 Put_Line ("Part1 " & Part1_Count'Image); -- part 2 : 2552 Put_Line ("Part2 " & Part2_Count'Image); end Main;
ada source #2
Output
Compile to binary object
Link to binary
Execute the code
Intel asm syntax
Demangle identifiers
Verbose demangling
Filters
Unused labels
Library functions
Directives
Comments
Horizontal whitespace
Debug intrinsics
Compiler
S390X GNAT 11.2.0
S390X GNAT 12.1.0
S390X GNAT 12.2.0
S390X GNAT 12.3.0
S390X GNAT 13.1.0
S390X GNAT 13.2.0
arm gnat 10.3.0-2 (Alire)
arm gnat 11.2.0-3 (Alire)
arm gnat 13.1.0
arm gnat 13.2.0
arm64 gnat 12.1.0
arm64 gnat 12.2.0
arm64 gnat 12.3.0
arm64 gnat 13.1.0
arm64 gnat 13.2.0
mips gnat 11.2.0
mips gnat 12.1.0
mips gnat 12.2.0
mips gnat 12.3.0
mips gnat 13.1.0
mips gnat 13.2.0
mips64 gnat 11.2.0
mips64 gnat 12.1.0
mips64 gnat 12.2.0
mips64 gnat 12.3.0
mips64 gnat 13.1.0
mips64 gnat 13.2.0
powerpc gnat 11.2.0
powerpc gnat 12.1.0
powerpc gnat 12.2.0
powerpc gnat 12.3.0
powerpc gnat 13.1.0
powerpc gnat 13.2.0
powerpc64 gnat 12.1.0
powerpc64 gnat 12.2.0
powerpc64 gnat 12.3.0
powerpc64 gnat 13.1.0
powerpc64 gnat 13.2.0
powerpc64 gnat trunk
powerpc64le gnat 11.2.0
powerpc64le gnat 12.1.0
powerpc64le gnat 12.2.0
powerpc64le gnat 12.3.0
powerpc64le gnat 13.1.0
powerpc64le gnat 13.2.0
powerpc64le gnat trunk
riscv64 gnat 10.3.0-2 (Alire)
riscv64 gnat 11.2.0-3 (Alire)
riscv64 gnat 12.3.0
riscv64 gnat 13.1.0
riscv64 gnat 13.2.0
sparc gnat 12.2.0
sparc gnat 12.3.0
sparc gnat 13.1.0
sparc gnat 13.2.0
sparc leon gnat 13.1.0
sparc leon gnat 13.2.0
sparc64 gnat 12.2.0
sparc64 gnat 12.3.0
sparc64 gnat 13.1.0
sparc64 gnat 13.2.0
x86-64 gnat (trunk)
x86-64 gnat 10.2
x86-64 gnat 10.4
x86-64 gnat 10.5
x86-64 gnat 11.1
x86-64 gnat 11.2
x86-64 gnat 11.3
x86-64 gnat 11.4
x86-64 gnat 12.1
x86-64 gnat 12.2
x86-64 gnat 12.3
x86-64 gnat 13.1
x86-64 gnat 13.2
x86-64 gnat 8.2
x86-64 gnat 9.5
Options
Source code
jNNBMTNzvTqhQLhQLMQL VCwnVRCGHHJTdsLtrdhrGdsq wFJZTbRcnJCbpwpFccZCBfBvPzfpgfgzzWvjSzNP wDWgDfWNTvwvgFfWfddGldJVprrrVdNlrN nLnmLSnmMVJvSrHqdV MsmsbLvtzMjFsCPDsfBwwT WTqSCqWSWqSgVZqJHpHmHrhMMVrRhBnn PtLGLGddGGMCpprM jFvLPPlLjvfjjffsclvPqzzJWTbqNSWZsbSTDzCW lLSSrfmddlNpnmLdfSPddDdbZQTZgZjbZgjcQZHQPjQgZP MJMnhzBJVJwvGsMRhRhTsHTjZjHFctbtHZcgZj vzvBWGJMVGwWGGhGqVBnGzVGDfCDmrqNfrrLSdpSfLSpNmNC qGWLgfbWhqpLgZbJvTRWJTvMWRslMv FQwPwNPCVFQQdNcFHNcwwsvslRDRTMDMsVTGJGtRTs wQHnwnQFPNPdjnnPjhphGqBrfpBBBfZf mpVpmtPhVtPBLLbQTJpBLZ vzFMlMzvvRZMTbJQJQbf srqzvRRqdvzFFrDnvqldFVtwCVCHWNqJHNNcHchCPt CQJJLZCJLqNMMDDgGLVV RfRFFszTtzbWTFnRtFrRrWvNHghvBVGgMffvmBVDNgGV znsjWzstnWjbDnDbTZCpwZcjpjZqQCwSPp jRrzzrPjLnnpQQDsjj CTVnTlZWHTcqZBcTTTHqWscQsQDQQDsmmQfvfhwDmv qlWFWWHTZTlqTFWZHtBVFdlTGdNzRnNngbbSrrSNNzPgPGSz cWjbcjnssMmRPWbGsWcMbfLBFrZBBLLgZwBrlfLQZtCw vqpvFHNvhvJzdZQZtlgNNwlrrw JzqVVVVpzhVJqzhSzJhhDVnFjRRMsPnSRcGMRMjWjWmR NznNGQgSRQffbbsR jjjCLwdvLcrhqdblFJsFSPfbDP qrrvwHqjtLmSSggpBtgn LGPtFtTfTfTfLrrWTSWGPrrsszbsjZHzgdzSwzbHdsglwl NhHpVpqNNqbdszRRRb ccBMJVDNCvvhDNpvNDpnNCVCHFPTmfLTGPMQrfLGmMLWWQQL dRgRhVLRlncZSSrtLp WJmwvvvjQvWwFBBvFJPHpwvGWTScGsrZtttGTSsrzTsSZt FFHJjmjjjPMvfHfwpdRqMppghdRCddDg NDTRFSnNsVVBDVlM JjLZWqwjHvfrvmHHvjLWWLlhPlnPlChlQhJQnnzPPBCV mwHvHmpvwpLmjnvpvLvvNGcTTggRbdTGcbNbTTpS GGhZQMsmGRfMwfpclgdBlbblBBZgJc tFvFSTSDnDTTLtcFMbWcBgclJrgd vzDtzMVtnLTTMTSjSDHtppqhsqqfGjmpPhmsRGPG MfJtWTTMJfzBbVWPZWQbNnDV FvlgSHSLvmCvZjgcCQQsPQQsjnbVDNVsdn HLhclRlHRmHvmLmclLZFSFwRRRpJMtwJwfGGrrtrwfpf scsswLQcGmQmNHCqvrsHqfff bdnPSMMMClbBBPCdDDnDVMDWWWvfvWFfFJfNqqNVFqFNfr bDPTlSTPPbSPjnPSbGmQLCcjLjwzRLcmCG tFFJjMnFhdcMMJlWtdnlFczBSZGNSjGGbBGZLbZZbLGB QRgqwwvsLssZnGCz gqfvvnpfHwRmHTFdFcPdJJmJJc fccTzVVcfSmdThTTFJPFgg wLsWfppsjBrnnwjCBZnZqJJQGhBdFJddQhFqdQBG pZrNCWLwLZLjwwWMftmNzttDcVzVvt rZnVVjVSMcrwsNbc dLvQLBLFddvBLzpGmddQCqNswzsMjbhgbblbcwshlb LLCCWjGBFPmCWdmmPWLdWBpLRZDSPRnHSStRfnZnZTnSSTfJ ddfnQRbpldRlRLgFglqGCLqsGq BWBVDZWTBTDPvVTZVDBDNMbhcLLHsFqgvHJsLCJCGcHGsJLH NPZPDMWZMbZrBVMDDWNmBhMVpSSRpzjjfjpwRnSpwzRzdzjr bvPSBttgGmZwScwShS NJspjJLdprzHgjrLzLNrnHQCmmcZQWlcQcNQwlwcQCZC HdRJsJrdHTbqGMDtgDqT sNVvSdTstDCtdzdzSCwTzCRhRQjfclMflppjGhffjZcN rgWlrnLLbqbQMfMphpWjjf BmrnrFPnnBLlqVwDCtCtVPDTzT mJMqlVlttQlFVmzFQMQMbQMSSDNwwdSddNddwdDswRDVdR GGZgcfjrvCCZvgCZqvPHSwRBBsBwswcwBNTDTcSR GZppfGHGrgGprZhLthFJhFqLWWFhtq WDHHLtRBHgDnVrWFVFBTdzzZLLjZzjjvddLsvv JlqmMpCMCGMwbwZddTtCtv cJJqSplpfSGccJGthFVcVHgFBWBgHgDB tlFwbWtQFLJhlBFlWPbwmsQndTrrqdnggjqdgnTgTT GCMBDDCvRpDVpRpHrsgdqTjqgdHcsjHd MDDvCVGzBGfpzBSNMSRRmwbLWlPmzbPmlJlWbFbJ fzFzFHBfnvpHFbnzbHfBHZggCGgtZCltDGggdCCVtZVD sLMNSccQLMSrmLcshLvtCGllPtDdGgtJgmlV cwLMwwNhQhsWSjqTqHnHbjWTvH NWlqqhNNnGtNvvWQdrVGBBQdVrwRQr mppCjppMrDTSgDppCDTMQVRwdBbBQVVbQdQsVB pgzzTFFFrjHqHnqJFWnh ncQrhQjqjVQhGsGBbhtsstTp RllWFLRfZrGlBTbg vFLLmfNRFSNDfSNjcwqJVrVVzQjc mmGrgwmGDGcVWVjNNW nDsqfPCHnpntDssfJPDPjWWhjNTTcjjhTTNcqWcc DfPCJLpbldRrlrdwmw dJDNbRhNbJdhqCnrWjhsTWvplg LMHrttLFcMmcMFLmtGplCggpjjnvTpgnTTFT czZMzrzVZzHZdNdbDDqDVQNR sbsJgbsmzdgRgWdg LLLFBzGMLjzzFtVFwwwCPPRCCqQQTnnCMMCMCC GllfptwjLjlGFVFjGzpFFNbJDmprrNDsDmDvJhmcvp SccPbfbncpcfsjbRjMBCTTFGMTCQtJtzFFFJ vvvdgVhlmlwlgZLgmJhWQCWGGbWtWJhzTJ NbLNDdbLVmqqmfcsrHcrpPqrcH HcgDBJSHTCzjjnMNJjrW VppGMwFwllwwbZZrjvnqmzmnzpqjNv wZlhtPGPLFVFlGZbVtVTQLLBQRRTSHTSMDCgLs HPMMnhBHlMnMBPBHJHPWfdnBmjvLZvjTvZTZDgTgTmQmZhZZ SrzrSScrctrwVzCSCmzQjmLTLvGDvTjGbm CswstFRNpcwVNRrVVSVwpwpHJnnWWBBHfWHlffWfQMnM mlFMtqjvMdqjmMCCJZsRQBnszlZz HcNgcPLcHLwtcfZBTsnsHJBJTzCQ LGGNhbNtNLDfcgcwfbgthfwFrqqVdFMqMMhMmvShFqmvVv NbvbBGNvhNhnhpbgpGfBvNgmRjCdPCPCCRCQmmpRdTmTPR qqFSSqWrtSSccjMdQMHFMBjPMj SBDSBZZZwGGZNJJg qTdHSLSFRZRHHZVgpzhbJszchsnsLg tDvflvrGttDCjlQfmCGvtCftczhbzwJczcJgznNmzJNhwgsp tQlDCDtrfrtlGrjlQBHFHPVHbBbZqTZdVZBF MTwvsQJMvvHwVMMJMQNNJRPWWjCllrlWGFlSFCpjgFVSWr zhcmnRZmqmWjCSFrFqCW ZbmhZcdZznZfndtwDtMMsRQTTQNRQw ZhhVqQTvZvVhSmQZcClRCLPCgTGGLbgl dJWHwndMHswswlGbCmclmLHbbP dnwwNJnjBjwwdddnjndfWvmvSNZQNrVVmZvZFvvQQv trlrlrZzsjRjdFhlpwdpnpdp QqLvvLQmLfQTLbLTfHmqHHLqQgFBdCJBBgggCJdhgJwCggBF DPDvqLqffqfhSVjVPSPtsj gsnVdcBcjMMntGMh RQZLRZlZDRJDCzCjblJSDjQZWWTWPCThMTFGNPTNttGwCFMh pDlQbSlzpQsjVpjHVfgs zgqtCtJltdGttJgVGPPJCtJvQFsFFbTFssNDNDsHLbTQbssP rRcwBnnpcmBqpbLHDspTbFsb mwRqrqrmWrZnfWmBmnRZlgClgJCJlGJzClGMtG jlzHllmPnpHlHZBWZJJDWMBNVH bQrhDbcLgsQrtdVCJWfCCBMMVWrJ QhGdGcLGwwwtcDzznppPpPwlpnSS qbpqvWFHbFHHsWwPqPpsVWZTlDcLDddddDrmrcVZDrmT MCgSSJMCztdmcLzlrlDl QCRMRSnNtRSqqRjsjLPPvp ZnZrTfsWWvhVSRmzqqnn pLGBLBgLCpgGpbdLbgMClJTmmhShSRShqSBDQSRRmQVV dpJPldgMMbglFdrNWWjHZNccTjZP CCZCQzwwdmMGDWMmhCMJgpnrnwsTrFNLgnpNgg jfStHtcjqDPbPtvqvgLNpppnHsrsFgnFNp fcqqPPPtPSfRVBBRPRPbvQzzhQWGZQVQQZDQMMzGQM VVlDNDgppgtNltlrJPbjSzPPzjsMsjBBMWMM LmGRmfmwCqQqbsQBMqJj cHRcCFfmfmGLJLGFcJLFwfdlhDgptthhHpVrNVdhlvhl vSSdnBVpscwZcBZB mLHzqtGtNfGHHFNHMhJMthsbcJtctZTw GHqHHGzNDNFCfqllCFqVDdPSDQnddvcpPQjdjg CMWcwGTrvzDWzrDccDCGzTTTplZgSjggjSpSljSjBpSmgmWB nssRttdsnhsdbFhtVFhNpgwNpBBgHHBBBBZSjNSl PnVPVPLFtvPvTwwrQq tlQlqlJCCJWgFrprPjpGVpQzvp SDbwShHbBZZbhcBdDBDSTrsVpPrzzzHVzNllzGlVNv BTbbScwRhwZLnLtfJFLFJgWl VDfPVHfDVMMfHSPSMTVfqgFthFcFrtcdhrhDQdDmdcdt bWGGHCplWnJNpJCCnlnNwdcwQhmmdmtwddBNcc HpGCnZGllzlzJWjnCbbnCnRvfvsSTVVSgVLqSsLsLzPPLV fQqcfqfSDzDWffDZ NcCLCtPCPMtNBwdthpLhPwzsHrszsZssTsWrDrDVTNNH twMPBtCpLBCtwMPpJcMBSjjnngqSjQQJbQjjmgmn vQwVQQVqcJvVJvCpQBCLpdgSFCdjjWWnMSgnSjgjbj hszPRDTVDWWWRnjWWj TtDDZsszlPllhPzmPVGssTPpQLcpvpBpZpcfpvrvQvBQLv sRmGqqzzzgCtRrttCP cffSwNDddTdfGWtgNCrtGMPP GGcTwHwHvjqLLjLvlJ JSdjLJMBdMSrfwwLpWgzWmvDhggzWvfmgD VsRtVllstHHNllsQsHQRzchcnDmvmvnRvvvcnZ tGVGCTTTtTFVbsTTNTHsTTqBqBLrBCjqBwqJwqBzLqzw MhjTJjlSDrplQvFQ RHttqbNGGmbbLmLmdqbgnFQwrZswQrwDpFpppdwfvQ gCNmDHHRCLHnWWSCjhWPShPz BvzpbBwBmsDrmGVgZFDm TnNRdtlRlCdFFGTLffrrGf jltNtRCPSlPNtcpwpGzjMBpvbhps hflJphNDmmbpfnfplbcvLsHVLsrsZsVvCb FgTFWqTBfFPfFqQqTwHsHccVVLQCZZZCVH BSSRTGWBgFggBWgBGStTGpzNztmjjzhhzDfNnMjnph mDDFjjFmVlTZJttffD hhRvNNCvdNMRLzhSzpptwslNTfNQntsJQZZTlN WCdMzdMzhMdvRvLhCRLPvjgHmggmbmbblgWcGmcbcG cScMdhsDhDDdvGzZptzGcnGtpB NPWjJqrjJWwrSFWRJlrlNWJLtZznLBBzZznLqnpqnpnznV NWNQwNPjCSQTQhTd fVVCVccppZMZMMCBzJTNJHWZTWZzNF QrmmPhDqPhsPRhrlbgRDbbPDJNJTnJzmzzfNNTNHNJNWmnvF DgbPLbPsQsrbsqLbgllsQQptfwSjwtVLfwdcpCjVwwSp ZlsmlrZZJcQmhBhlNrsrJRRbRCRggRbzGCRHgRCDGB fMFvdfVTTdjWTTTfvSjVjpjzcCbFHGPHPDbPHRCFGGRHHG cdvfSWjfjpdVqSwSvMdLrlrmhqZhhrrLLJQhNr sWVVmDJsNWNjcSNJZcNcZWWsHTGHTChhHGtHsFFbbsfHhH nqPRwQRgpQRPQQgMQgQLQqBhvTRtfdfvfCbFtTFFFTtvff qgrPMLLPpVlbDrVrWD VcGjcCHcVHPrGnjQDQgDgQDFtdglRtlQ bWWhfzJhvZWJzNpmRTtsDLDgRTsNddFT MhJMhJbMmSZbJZwSCtjqcGrrnGjC FCvpgDsZNsCbvvvpVwcDrjcrmVMwVwHJ fhfWdPhhhhRQQqzdLSRHRHJjBTTmcrTMrMrwmczcwwTz qndhdQWndftfhWStfLQQfWgFNsgFpHCtgCNbGZZlZCll mqTCNhTNmGTLwLNfLrSrgZHDvfPDPv cjsMQppsFnFslnRQQGMDHGZHSgzHPDZDSf stWFjcFFsJlQcQtwtbVwCmCthmBTGb fmsffcqhmqPsnTCnCcQpzjSSNpBWBTQpVSSD vHbgLRvvvzdgjVVjWg WltLWvWlqcChrhlf CtwjffWrdznRtzCwLsmGLlLMsMmMGb cZFFbgPgJZDchMMPVsmlPGmG SpNFJBJccNgDcTJJTdbStbnntrCdSrjWnb qWzgNFqzqHNTBzFNCZCGPpPlHmdPblls rfSJRJnhhnJDjrfvRStCmpdGsdlDpZZZPbPCmW cffRvfnnVRjFTWVTLQMFWN VcHhVrVCQQWhffzcRZznnZFf dDSCGSsSblwDdmLqvnFZzNZplfpfRZfBnl tCCwGmSqbqtwsVPjVJWtJHHhQV fvvTcWzGcCJrJGJvvHMbZTmRQTbpMdQQsR SgFhVgllLgjLgwlwljFqVFSFdjmBHmZdRMdZpbjpmpjBsHdM LNqFnlDgVqllwLFLnVSgLFZtCzzzzvCGGccCCDCfvJrv FczpzmSjVVpSQrzzcRpRcrwqMtJqwtvtLHvQwtLtnJMw TvbGGbNfGCBBLHtJBHDZDMqD shgdNTGgvNsflspcPjzVdmppczrV JHLPLTsSllgSSPPSPLTRTdjCZGZDGGgCdqZtZCZdZt mhFpnpFwqdGbdFDt prpWcvnmhmpccBBJMJJlPWLHMDSDWW GcMcjDbDMMjqHBHVlHvv rLCrwNJCnwrZNLWQQwzQpRqQPlBRVVBRvvtHqf zhnrnzdrCwLJCwzwCMGcbdFTscTmgcFlgc cnwlFrdMsggblgsrMbncwrsWzjGBTjznBzWNzPzTzfjTzf vvVVHSpQvvRQDJGGLWGfTLTBLQMN hCmJqVvMSpqqChCJHDZrFsdhrtgFhttZZhts sfDNqLNpqpzCzLsDqzbCVWRhjTNhShTjHmmjjhStBmvT wZrlwJwFJGlFMTjhBBZTSTRSbv wrQrgnPwMsnLbfffVc hDcwwGWhMMssTcdM NQmLbNSZHQSHSNpbvfdqfRsZMqssjqdd LNVtLSSHLSgLNrgwJgJGnBwFMBzD CRDfCbfjcnRCBVfjVMfMjZpPptplPWtppStpSlBqlq HdTFLGsdLrzNWtvqPTcpgPZl JLGmmHrwJGwhjmfMcbDjQC VShGpPbWjcPCcTLcPN HqfqDfDFFJDvZRJvqZRRqHZdNcwjllwvQQLQlllccwclCMCT FddsFmJjjrgGmbSSpS NRFFLtFtqFLGsdnGbQSs ljMfMBDlJHgBVHgVflfnwdsSQQbddsSsqnqGfs PlzDzjljzqRzWzZW dtzZZbctPzwdlzRwlcdfRgtQJmFmhPSmmSsQQFhsmqSFvm nDjHnNjjjMnfjNTMWhHQWJSqSSQmhqhm CDpVCfrjLnnfwtBcpdcbcBZt sssZSZtDfHbbdtBTCRBzRDFJCBLp jwWgmWlNQNLlcjWhgQlrQQWrCCJJzFCMVMTzpBMMCVCMTwpT ggLgrqljLlGvHqttftbP cSGBFsFcSRZSQGsgBNgVMwMhDQDVfqPjMhwwVq vnCTLlrpPlHzzjbMfqpbww rJCnlmClvWvLrTmtTlZcZWSSWPGGdNcFGgcR lfDDvZZSvLtDtCQZltCqVBWVBCbHJjRdNqWq pGGhhzMRcqMBqMdVBN mzgwGrrwhThFGPmGPcFGpwStTfltfDftStDsQRsflDQl LjnSjLZLBcbBdDqzND rrfhfMRmpsghfrhGhgQrcPNtZcqNCqdCqPzcNZMM ZTTgvRpmfffpfgRRhWnVSJJLLWnvJHFlFH lstcGcttdczzsWVCvQVLCHHnQHWL rjmJrmfmJMqvQTLvqfGG JbNrjGjGrMDRJghZggcchhDhzc tftJQwCgSjpdWHjbRJ DcwvlZBmGvHjdbczcRpb sqwDlsBvGNSMQTCNfCTC DwDrtvMHtBCvcpDcjCMFtBCblJfJGJbZlfzrRlJdbRdZld sPLPmqhSnLQQSWqlbzRRhfJCJfNJhZ mVCnWCsQqqLTPWmnDVMFVtHFtMBFpjwM scChGddJztdNswNsdDsthvmpVmRVcZjmvVvRSMZVSZ lQLCWgWHCWbFPbbbHqLnLPHHVMpVRgSMmZVSBZBjZVSjRBZp QrTlTHbPnTsJGtsDdGCr fMjgFqtFWMhtjcNQSDMmNlCCDMQN sVHdHdJHwPGPGwwbpJGTbGTvClldmvRSnvlDlLLSlvRnQl pJbHPHJGVbBswpTcfrBtrhmtrFczzq SDGSDGVPqqqQPGrTQVTQDrSrJfHJgqhgJqzhJJmWfHpWpzmg twCdCWMLwbtLLjBddgfcJgRHfRRpfcpRHM FZdbvFFbVvsWsQsW rzrRgqGrwgjRVqJCHLzCCWhtDbCC dTZnNpvBvnJdBpBnsJPvsSCbthLtLbbQShQQLHtSST BlplPmdlFsslfJmmRfwfwMjw PPHSrmfHTnmHnHBzRhbFgfbFwzQg LcsVsGtVLtLqpzwBvgzQRgTTTp TjLJGTTJWJZZWWZS tHcshJcJRhLsQscVtccJLRHfvlPjZFSvmvSbvfLFfFFbGZ drwdTNlwwBTpCdCdwGPrrmjjmjmbSjFPrF wglnzCDpJtQcztMR bbMjTbBvgjZNSqldTlVt wwrcFwsrsnnCQzrCsLnRsQZcNlpJVZHdttZVttSZqJZd GwLnrsmFCCzqzhvPbPmWmvvfjj dcnwQdcdrJdSwSFBBqfBfwMqfBfzsh RgmZpWlCClRlTgBZbhHJJsZjfBHZ DlNVWgWpgDCCNRDJFcrtQGrrVnrcFPtc sWSHsdSrHWHsbdsddBsbjmfwffmJDJwcfDQgfvwJDj ZNGPhRqCCRNGNwSDvmmwwgDhgf lGlTLTGTSVVFqVTqsFHWntbWBsBsnBHb QRRgRvDwWDVjmSbDnbTDlDnbqS rHCPPHrcLFJcllqbTlpq CldFrNFsgVhhhWgN qSfMgNqfpmSmlQrRFG cbBczbtbZTcPWzcrTrmRrLGFTQQFmJ PBZChtzzcWPcZtBvPjtzBBCfHMMNdDgDpMfVfVpHMqNR LJPPCHtgtLDfFfvTLwfv pVGWGGjjjplhpGGVjWnldsvrrMFvfDMTWBdFrfFF cjlhShjchhjGGmNVjplcQgmTPtHPPJmQgQHgtqgZ
Become a Patron
Sponsor on GitHub
Donate via PayPal
Source on GitHub
Mailing list
Installed libraries
Wiki
Report an issue
How it works
Contact the author
CE on Mastodon
About the author
Statistics
Changelog
Version tree